<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
</head>

<body>
  <script>
    //     < !-- * Set 是一种类似 数组的 数据结构，但是成员的值是唯一的
    // * 本身是一个构造函数-- >
    var arr = [1, 2, 3, 4, 54, 2, 12, 123, 123, 1, 1, 2, 4, 3, 31, 130]
    var arrSet = new Set(arr);
    console.log(arrSet)
    // 没有length 属性  set数据  有.size 属性
    console.log(arrSet.size)
    //
    arrSet.forEach((item) => {
      console.log(item)
    })
    // k 代表数据的每一项的值
    for (let k of arrSet) {
      console.log(k)
    }
    // set数据类型  有keys() values()  entries()
    // set数据解构 可以用entries() 
    for (let [k, v] of arrSet.entries()) {
      console.log(k, v)
    }
    console.log(arrSet.keys())

    // 给set数据解构添加方法
    arrSet.add("刘德华").add("汤唯");
    console.log(arrSet)
    //删除set数据
    arrSet.delete("汤唯")
    console.log(arrSet)
    //判断是否存在方法has()
    console.log(arrSet.has("刘德华"))
    // 清空set方法
    // arrSet.clear()
    // console.log(arrSet)
    // function c(set) {
    //   return set.clear()
    // }
    // c(arrSet)
    // 给Set构造函数增加c方法 清空
    // Set.prototype.c = function () {
    //   this.clear();
    // }
    // arrSet.c();
    // console.log(arrSet)
    // 字符串去重
    var str = "dslkhfalsdhfhasldhfahsldfajsdh";
    let st = new Set(str) //去重后变为set类型 非字符
    console.log(st)
    var str2 = [...st].join('');
    console.log(str2)//dslkhfaj
    // 值得注意的是,NaN被Set认为是相同的,{}被认为是不同的
    // var set = new Set([{}, {}])
    // console.log(set); //{{},{}}
    // var set = new Set([NaN, NaN])
    // console.log(set); //{NaN}



  </script>
</body>

</html>